In computer programming, reflection is the process by which a computer program can observe and modify its own structure and behavior during run-time. In typical computer programs, instructions are executed and data is processed; however, in some programming languages, programs can also treat instructions as data and data as instructions, and therefore can make reflective modifications during run-time. While reflection is commonly used in newer high-level virtual machine programming languages, reflection is generally unavailable in older static programming languages.